需求和价格分析

对于商品来说不同的定价策略会影响到收益和利润,理解不同的需求的消费者的消费意愿对价格的响应具有重要的实践意义。从分析的角度利用需求曲线,以及价格对市场环境拟合可以用于评估利润的最大值。在基础信息包括:

  • 成本产量,生产单位产品的成本
  • 产品的需求曲线,反映用户对产品不同价格的需求数量。本次的讨论不扩大影响产品需求变化的其他因素——例如经济环境以及竞争者价格,单纯从价格方面讨论
  • 价格弹性,反映给定的需求曲线下,价格每增加一个百分点致使需求减少的百分比 $\text{price elasticity} =-\frac{(\text{demand}_2 - \text{demand}_1)*100}{1% \text{price}_1\text{demand}_1}$ 。具有价格弹性的表现是价格弹性大于 1,反之当数据值小于 1 时,则是不具有价格弹性

需求曲线

利用价格变化,需求响应变化得到曲线即为需求曲线,常用需求曲线包括线性需求曲线乘幂需求曲线

线性需求曲线

需求数量和价格存在 $\text{demand}=a*\text{price}+b$ 的线性关系,线性需求曲线上价格弹性是变化而非一个常数:

$$
\begin{align}
&\text{pe} = -\frac{\Delta{demand}100}{1% \text{price}_1\text{demand}_1} \
&\frac{\text{pe}
(\text{demand}_1^21% - b)}{100a} + \text{demand}_1= \text{demand}_2
\end{align}
$$

因为价格弹性 $\text{pe}$,需求价格线性关系系数 $a$、$b$ 是常量,所以需求的变化不是线性的。

如果存在价格和需求数据,可以使用 statsmodel 进行线性拟合:

linear_fit.py >folded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import io
import scipy
import pandas as pd
import statsmodels.api as sm

# 模拟数据
data = io.StringIO("""
price,demand
100,500
101,490
""")
df = pd.read_csv(data)

# 使用 scipy 进行线性拟合
endog = df[["demand"]].to_numpy()
exog = df[["price"]].to_numpy()

# 添加常数项
exog = sm.add_constant(exog)

# 使用最小二乘法线性拟合
model = sm.OLS(endog, exog)
result = model.fit()

# 得到模型系数
result.params # 得到的结果是 array([1500., -10.])

乘幂需求曲线

乘幂需求曲线的关系是 $\text{demand}=a*\text{price}^b$,此时 $-b$ 为需求的价格弹性。如果存在价格和需求数据,需要拟合出系数可以通过 scipy 的包进行:

linear_fit.py >folded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import io
import scipy
import pandas as pd
import statsmodels.api as sm

# 模拟数据
data = io.StringIO("""
price,demand
50,2000
60,1388.889
70,1020.408
80,781.25
90,617.284
100,500
110,413.2231
120,347.2222
130,295.858
140,255.102
150,222.222
""")
df = pd.read_csv(data)

# 使用 scipy 的 curve_fit 拟合 y=a*x**b
ydata = df["demand"].to_numpy()
xdata = df["price"].to_numpy()

# curve_fit 需要申明幂函数表达式:ydata = f(xdata, *params) + eps
popt, pcov = scipy.optimize.curve_fit(lambda x, a, b: x**b * a, xdata, ydata,)

# 前者是结果参数,后者是参数的协方差
popt # array([ 5.00000270e+06, -2.00000013e+00])

规划求解最优价格

需求和价格达到最佳的匹配才能获取到最大化利润,应用中通过规划求解的方式得到最优价格是有实际意义的。规划求解的模型条件包括三个部分:

  1. 需要达到的最优目标值
  2. 可变条件,是可以调整的变量,在当前条件下即是价格
  3. 约束条件,对于可变条件的限制条件

规划求解根据求解的问题类型不同,需要使用不同的 solver 解决问题(可以参考 Post not found: 数据分析-规划求解 规划求解)。本例子是针对剃须刀的定价策略,给定的条件是需求的价格弹性为 2,单个的可变成本为 2.00$,价格在2.00$ 时,需求的数量为 600 万个。

针对需求解决定价问题目的是达到利润最大化,而 $\text{profite}=\text{price} \times \text{demand}$ 中价格和需求都是变化的,因此在使用 solver 时不能使用线性规划求解器。

#TODO:

参考

  1. Get Started with OR-Tools for Python  |  Google Developers
作者

ZenRay

发布于

2021-01-07

更新于

2021-04-19

许可协议

CC BY-NC-SA 4.0